#ifndef SERVER_H
#define SERVER_H

#include <cstdint>
#include <utility>
#include <memory>
#include <string.h>
#include <mutex>
#include <string>
#include <queue>
#include <map>

#include <boost/asio.hpp>

#include "session.h"

class Server
{
public:

    Server(boost::asio::io_context&ioc, uint16_t port);
    void DeleteSession(const std::string& uuid);
private:    

    //使用智能指针解决程序崩溃问题
    void _StartAccetp();
    void _HandleAccept(std::shared_ptr<Session> session, const boost::system::error_code& ec);
private:
    boost::asio::io_context& m_ioc; //io上下文 不可以拷贝，只能引用
    TCP::acceptor m_acceptor;       //监听客户端的连接

    std::map<std::string, std::shared_ptr<Session>> m_sessions; 
    std::mutex m_mutex;
};


#endif // SERVER_H